const getDateFn = {
  //1、 得到今天、昨天、明天日期
  //dates为数字类型，0代表今日,-1代表昨日，1代表明日，返回yyyy-mm-dd格式字符串，dates不传默认代表今日。
  getDate(dates) {
    var dd = new Date()
    var n = dates || 0
    dd.setDate(dd.getDate() + n)
    var y = dd.getFullYear()
    var m = dd.getMonth() + 1
    var d = dd.getDate()
    m = m < 10 ? '0' + m : m
    d = d < 10 ? '0' + d : d
    var day = y + '-' + m + '-' + d
    return day
  },
  //2、得到本周、上周、下周的起始、结束日期
  //type为字符串类型，有两种选择，"s"代表开始,"e"代表结束，dates为数字类型，不传或0代表本周，-1代表上
  getMonday(type, dates) {
    var now = new Date()
    var nowTime = now.getTime()
    var day = now.getDay()
    var longTime = 24 * 60 * 60 * 1000
    var n = longTime * 7 * (dates || 0)
    if (type == 's') {
      var dd = nowTime - (day - 1) * longTime + n
    }
    if (type == 'e') {
      var dd = nowTime + (7 - day) * longTime + n
    }
    dd = new Date(dd)
    var y = dd.getFullYear()
    var m = dd.getMonth() + 1
    var d = dd.getDate()
    m = m < 10 ? '0' + m : m
    d = d < 10 ? '0' + d : d
    var day = y + '-' + m + '-' + d
    return day
  },
  //3、得到本月、上月、下月的起始、结束日期
  //type为字符串类型，有两种选择，"s"代表开始,"e"代表结束，months为数字类型，0代表本月，-1代表上月，1代表下月
  getMonth(type, months, m) {
    var d = new Date()
    var year = d.getFullYear()
    var month = m ? m : d.getMonth() + 1
    if (Math.abs(months) > 12) {
      months = months % 12
    }
    if (months != 0) {
      if (month + months > 12) {
        year++
        month = (month + months) % 12
      } else if (month + months < 1) {
        year--
        month = 12 + month + months
      } else {
        month = month + months
      }
    }
    month = month < 10 ? '0' + month : month
    var date = d.getDate()
    var firstday = year + '-' + month + '-' + '01'
    var lastday = ''
    if (
      month == '01' ||
      month == '03' ||
      month == '05' ||
      month == '07' ||
      month == '08' ||
      month == '10' ||
      month == '12'
    ) {
      lastday = year + '-' + month + '-' + 31
    } else if (month == '02') {
      if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)) {
        lastday = year + '-' + month + '-' + 29
      } else {
        lastday = year + '-' + month + '-' + 28
      }
    } else {
      lastday = year + '-' + month + '-' + 30
    }
    var day = ''
    if (type == 's') {
      day = firstday
    } else {
      day = lastday
    }
    return day
  },
  //4、得到今年、去年、明年的开始、结束日期
  //type为字符串类型，有两种选择，"s"代表开始,"e"代表结束，dates为数字类型，不传或0代表今年，-1代表去年，1代表明年
  getYear(type, dates) {
    var dd = new Date()
    var n = dates || 0
    var year = dd.getFullYear() + Number(n)
    if (type == 's') {
      var day = year + '-01-01'
    }
    if (type == 'e') {
      var day = year + '-12-31'
    }
    if (!type) {
      var day = year + '-01-01/' + year + '-12-31'
    }
    return day
  },
  getQuarter(type) {
    // 定义季度区间
    // 获取当前月，在某个区间里就是哪个季度
    // 再根据这个季度的月份区间，获取首月的第一天，以及末月的最后一天，根绝末月取得该末月的最后一天
    // 还要考虑跨年季度。只有第一个季度的上个季度会跨年
    // 如果当前是第一季度，获取上季，那就获取上一年的最后一个季度呗
    var qArr = [
      { q: '一', r: [ '1', '2', '3']},
      { q: '二', r: [ '4', '5', '6']},
      { q: '三', r: [ '7', '8', '9']},
      { q: '四', r: [ '10', '11', '12']}
    ]
    var m = this.getMonth('s', 0).substring(6, 7);
    var sm = undefined  // 首月
    var em = undefined  // 末月
    var res = ''
    qArr.map((i, index)=>{
      for(let key in i) {
        if(i['r'].indexOf(m) != -1) {
          if(type == 'c') { // 本季度
            sm = this.getMonth('s', 0, i['r'][0]) 
            em = this.getMonth('e', 0, i['r'][2])
            res = sm + ' 00:00:00' + ' ~ ' + em + ' 23:59:59'
          }else { // 获取上个季度
            if(i['q'] == '一') { // 如果是第一季度，要获取上一年的最后一个季度
              var year = new Date().getFullYear() + Number(-1)
              res = year + '-10-01' + ' 00:00:00' + ' ~ ' + year + '-12-31' + ' 23:59:59'
            }else {
              sm = this.getMonth('s', 0, qArr[index-1]['r'][0]) 
              em = this.getMonth('e', 0, qArr[index-1]['r'][2])
              res = sm + ' 00:00:00' + ' ~ ' + em + ' 23:59:59'
            }
          }
          return 
        }
      }
    })
    return res
  },
}
export default getDateFn
